const express = require("express");
const router = express.Router();
// 读取文件、删除文件的模块
const fs = require("fs");
// 路径模块
const path = require("path");
//导入上传文件的包
const multer = require("multer");
// 导入生成id的包
const { v4: uuidv4 } = require("uuid");
// 导入jwt token工具
const JwtUtil = require("../../utils/jwt");
// 导入轮播图数据模块
const banner = require("../../model/banner");
const storage = multer.diskStorage({
    // 设置保存文件的路径
    destination: function (req, file, callback) {
        callback(null, "public/upload/banner");
    },
    filename: function (req, file, callback) {
        // 将保存文件名设置为 字段名 + 时间戳，
        // 比如 logo-1478521468943
        let suffix = file.mimetype.split("/")[1];
        //获取文件格式
        callback(null, file.fieldname + "-" + Date.now() + "." + suffix);
    },
});

// 生成的图片放入upload文件夹下
const upload = multer({ storage: storage });

// 获取服务器地址
let { HOST_URL } = require("../../config/host");

// 接口1：上传图片预览图片
router.post("/upload_img", upload.single("photo"), async (req, res) => {
    // 从请求头对象获取token信息
    let token = req.headers["token"];
    // 判断用户登录状态,请求需要进行token校验
    console.log("token", token);
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    console.log(result, "err");
    if (result == "err") {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: "登录已过期,请重新登录。",
        });
    } else {
        // 定义路径
        let picUrl = `${HOST_URL}/upload/banner/${req.file.filename}`;
        // 返回上传头像文件路径
        res.send({
            code: 200,
            picUrl,
            msg: "轮播图上传传预览成功。",
        });
    }
});

router.post("/addBanner", async (req, res) => {
    // 获取前端提交的参数
    let { banner_href, banner_picUrl, banner_title, banner_create_time, banner_desc } = req.body;
    // console.log()
    // 从请求头对象获取token信息
    let token = req.headers["token"];
    // 判断用户登录状态,请求需要进行token校验
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == "err") {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: "登录已过期,请重新登录。",
        });
    } else {
        let banner_id = uuidv4(); //获取随机字符串 数据的ID(识别这条记录的标记)

        await banner
            .addBanner(banner_id, banner_href, banner_picUrl, banner_title, banner_create_time, banner_desc)
            .then((content) => {
                res.send(content);
            })
            .catch((err) => {
                res.send(err);
            });
    }
});

router.get("/bannerList", async (req, res) => {
    // 调用获取广告列表的接口
    await banner
        .bannerList()
        .then((content) => {
            res.send(content);
        })
        .catch((err) => {
            res.send(err);
        });
});
router.get("/bannerPaging", async (req, res) => {
    // 调用获取广告列表的接口
    let { page_num, page_size } = req.query;

    await banner
        .bannerPaging({ page_num, page_size })
        .then((content) => {
            res.send(content);
        })
        .catch((err) => {
            res.send(err);
        });
});
router.get("/total", async (req, res) => {
    // 调用获取广告列表的接口
    await banner
        .total()
        .then((content) => {
            res.send(content);
        })
        .catch((err) => {
            res.send(err);
        });
});
router.post("/deleteBanner", async (req, res) => {
    let { banner_id } = req.body;
    console.log(banner_id);
    // 从请求头对象获取token信息
    let token = req.headers["token"];
    // 判断用户登录状态,请求需要进行token校验
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == "err") {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: "登录已过期,请重新登录。",
        });
    } else {
        console.log(123123);
        await banner
            .deleteBanner(banner_id)
            .then((content) => {
                res.send(content);
            })
            .catch((err) => {
                res.send(err);
            });
    }
});
router.post("/delete_img", async (req, res) => {
    let { picUrl } = req.body;
    //通过slice方法，分割出图片前面的url地址
    let index = picUrl.indexOf("banner");
    if (index > 0) {
        let temp_path = path.join(__dirname, "../../public/upload/", picUrl.slice(index));
        console.log("--->", temp_path);
        // fs.unlink删除文件
        fs.unlink(temp_path, function (error) {
            // console.log(error)
            if (error) {
                res.send({
                    code: -1,
                    msg: "删除图片失败。",
                });
            } else {
                //删除图片文件成功
                res.send({
                    code: 200,
                    msg: "删除图片成功。",
                });
            }
        });
    }
});
router.get("/searchBanner", async (req, res) => {
    let { keyword } = req.query;
    // console.log('0.0',{keyword});
    // 调用model下的api，传参不是object对象
    await banner
        .searchBanner(keyword)
        .then((content) => {
            res.send(content);
        })
        .catch((err) => {
            res.send(err);
        });
});
module.exports = router;
